// 纯数字校验，可匹配整数（包括正整数、负整数和零）
const pureNumberRegex = /^-?\d+$/;

// 正整数校验，不包含零
const positiveIntegerRegex = /^[1-9]\d*$/;

// 非负整数校验，包含零
const nonNegativeIntegerRegex = /^\d+$/;

// 手机号校验（中国），支持 13、14、15、16、17、18、19 开头的手机号
const phoneNumberRegex = /^1[3-9]\d{9}$/;

// 固定电话校验（中国），考虑了区号和分机号的情况
const landlinePhoneRegex = /^(0\d{2,3})-?(\d{7,8})(-(\d{1,4}))?$/;

// 邮箱校验，较为通用的邮箱格式校验
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

// 身份证号校验（18 位），对日期和校验位有一定的合理性检查
const idCard18Regex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[0-9Xx]$/;

// 身份证号校验（15 位），早期的身份证号格式
const idCard15Regex = /^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$/;

// 银行卡号校验，简单校验长度在 12 到 22 位之间的数字
const bankCardRegex = /^\d{12,22}$/;

// 密码强度校验，要求至少 8 位，包含大小写字母、数字和特殊字符中的至少三种
const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;

// 简单密码校验，要求至少 6 位
const simplePasswordRegex = /^.{6,}$/;

// 中文姓名校验，允许 2 到 10 个中文字符
const chineseNameRegex = /^[\u4e00-\u9fa5]{2,10}$/;

// 英文姓名校验，允许包含字母、空格和连字符，长度在 2 到 20 个字符
const englishNameRegex = /^[a-zA-Z\s-]{2,20}$/;

// 不带特殊符号的字符串校验，只允许字母和数字
const noSpecialCharsRegex = /^[a-zA-Z0-9]+$/;

// 网址校验，支持 http 和 https 协议
const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;

// 邮政编码校验（中国），6 位数字
const postalCodeRegex = /^[1-9]\d{5}$/;

// 日期格式校验（YYYY-MM-DD）
const dateFormatRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;

// 时间格式校验（HH:MM:SS）
const timeFormatRegex = /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;

// 金额校验，支持整数和小数，最多两位小数
const moneyRegex = /^\d+(\.\d{1,2})?$/;

// 车牌号校验（中国），包含新能源和非新能源车牌
const licensePlateRegex = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{1}[A-HJ-NP-Z]{1}(([A-HJ-NP-Z0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9]{4}))$/;

// 微信号校验，以字母开头，允许字母、数字、下划线和减号，长度在 6 到 20 位
const wechatIdRegex = /^[a-zA-Z][a-zA-Z0-9_-]{5,19}$/;

// 导出所有正则表达式
export {
    pureNumberRegex,
    positiveIntegerRegex,
    nonNegativeIntegerRegex,
    phoneNumberRegex,
    landlinePhoneRegex,
    emailRegex,
    idCard18Regex,
    idCard15Regex,
    bankCardRegex,
    strongPasswordRegex,
    simplePasswordRegex,
    chineseNameRegex,
    englishNameRegex,
    noSpecialCharsRegex,
    urlRegex,
    postalCodeRegex,
    dateFormatRegex,
    timeFormatRegex,
    moneyRegex,
    licensePlateRegex,
    wechatIdRegex
};    